using System;
using System.Collections;
using System.Data;
using System.Configuration;
using System.Web.UI;
using SystemFrameworks;
using Anthem;
using BusinessRules;
using Common;
using DataAccess;
using System.Web.UI.WebControls;

public partial class Usuarios : PageBase
{

    public string IdentificadorUsuId
    {
        get { return (ViewState["IdentificadorUsuId"] == null ? string.Empty : ViewState["IdentificadorUsuId"].ToString()); }
        set { ViewState["IdentificadorUsuId"] = value; }
    }

    #region Page_Load

    protected void Page_Load(object sender, EventArgs e)
    {
        WccAcciones1.AddEnabledDuringCallBack = false;
        WccAcciones1.AddTextDuringCallBack = "Guardando... Por favor esperar!!!";
        WccAcciones1.UpdateEnabledDuringCallBack = false;
        WccAcciones1.UpdateTextDuringCallBack = "Guardando... Por favor espere!!!";

        if (Manager.IsCallBack)
        {
            Manager.RegisterClientScriptBlock(typeof(Page), "reloj", "<script>muestraReloj2();</script>");
        }
        WccAcciones1.Permisos = Permisos;
        if (!Page.IsPostBack)
        {
            cargarerfiles();
            cargarDepartamentos();
            TraerContextItems();
            if (IdentificadorUsuId != "")
            {
                cargarCampos();
                txtUsuario.Enabled = false;
                WccAcciones1.Accion = Utilidad.Acciones.Actualizar;
                WccAcciones1.AddVisible = false;
                WccAcciones1.UpdateVisible = true;
                WccAcciones1.DeleteVisible = true;
                
            }
            else
            {
                txtUsuario.Enabled = true;
                WccAcciones1.Accion = Utilidad.Acciones.Adicionar;
            }
        }
    }

    #endregion

    #region cargarerfiles

    private void cargarerfiles()
    {
        BusinessRules.Perfiles objPerfiles = new BusinessRules.Perfiles(ConfigurationManager.AppSettings["Conn"]);
        AdmPerfilesData objBasZonasGeograficasData = objPerfiles.BuscarPerfiles();
        lbPerfiles.DataSource = objBasZonasGeograficasData;
        lbPerfiles.DataValueField = AdmPerfilesData.PER_ID_FIELD;
        lbPerfiles.DataTextField = AdmPerfilesData.PER_NOMBRE_FIELD;
        lbPerfiles.DataBind();
        //lbPerfiles.Items.Insert(0, new ListItem("", ""));
        //ddlPerfiles.SelectedIndex = 0;
    }

    #endregion

    #region TraerContextItems

    private void TraerContextItems()
    {
        if (Context.Items["IdentificadorUsuId"] != null)
            IdentificadorUsuId = Context.Items["IdentificadorUsuId"].ToString();
    }

    #endregion

    #region cargarCampos

    private void cargarCampos()
    {
        BusinessRules.Usuarios objBR = new BusinessRules.Usuarios(ConfigurationManager.AppSettings["Conn"]);
        AdmUsuariosData objAdmUsuariosData = objBR.ConsultarUsuario(Convert.ToInt32(IdentificadorUsuId));
        try
        {
            if (objAdmUsuariosData != null)
            {
                DataRow objRow = objAdmUsuariosData.Rows[0];
                //dlpTipoUsuario.Seleccionar(objRow[Adm_UsuariosData.USU_TIPO_FIELD].ToString());
                txtNombre.Text = objRow[AdmUsuariosData.USU_NOMBRE_FIELD].ToString();
                txtCargo.Text = objRow[AdmUsuariosData.USU_CARGO_FIELD].ToString();
                txtDireccion.Text = objRow[AdmUsuariosData.USU_DIRECCION_FIELD].ToString();
                txtTelefono.Text = objRow[AdmUsuariosData.USU_TELEFONO_FIELD].ToString();
                txtCorreoE.Text = objRow[AdmUsuariosData.USU_CORREO_ELECTRONICO_FIELD].ToString();
                ViewState.Add("strCorreo", objRow[AdmUsuariosData.USU_CORREO_ELECTRONICO_FIELD].ToString());
                txtDiasExpiracion.Text = objRow[AdmUsuariosData.USU_DIAS_EXPIRACION_FIELD].ToString();
                dlpEstadoUsuario.SelectedValue = objRow[AdmUsuariosData.USU_ESTADO_FIELD].ToString();
                rblGenero.SelectedValue = objRow[AdmUsuariosData.USU_GENERO_FIELD] != DBNull.Value ? objRow[AdmUsuariosData.USU_GENERO_FIELD].ToString() : Utilidad.MASCULINO;
                txtUsuario.Text = objRow[AdmUsuariosData.USU_USUARIO_FIELD].ToString();
                if (objRow[AdmUsuariosData.USU_CAMBIO_CLAVE_FIELD].ToString().ToUpper() == ApplicationConfiguration.SI)
                    chkCambioClave.Checked = true;
                if (objRow[AdmUsuariosData.USU_FECHA_NACIMIENTO_FIELD] != DBNull.Value)

                clFechaNacimiento.SelectedDate = Convert.ToDateTime(objRow[AdmUsuariosData.USU_FECHA_NACIMIENTO_FIELD]);

                FE_Symmetric objSymetric = new FE_Symmetric();
                string strClave = objSymetric.DecryptData(Utilidad.EncryptionKey,
                                                          objRow[AdmUsuariosData.USU_CLAVE_FIELD].ToString());
                txtClave.Attributes.Add("Value", strClave);
                txtConfirmarClave.Attributes.Add("Value", strClave);
                txtClave.AutoUpdateAfterCallBack = true;
                txtConfirmarClave.AutoUpdateAfterCallBack = true;

                //primero tiene qeu cargar los municipios con el departamento
                string zonidDep = objRow[AdmUsuariosData.ZON_ID_FIELD].ToString().Substring(0, 2);
                if (zonidDep != "")
                {
                    cargarMunicipios(zonidDep);
                    ddlMunicipiosAnthem.SelectedValue = objRow[AdmUsuariosData.ZON_ID_FIELD].ToString();
                    ddldepartamentosAnthem.SelectedValue = zonidDep;
                }

                //cargar perfil
                #region Perfiles del usuario

                AdmPerfilesUsuariosData datPerfiles;
                try
                {
                    datPerfiles = objBR.BuscarPerfilesUsuario(Convert.ToInt32(IdentificadorUsuId));
                }
                catch (Exception ex)
                {
                    throw new ApplicationException(ex.Message, ex);
                }

                if (datPerfiles != null && datPerfiles.Rows.Count != 0)
                {
                    //objUsuario.Perfiles = new objPerfil[datPerfiles.Rows.Count];
                    decimal decIdPerfil = 0;
                    //string strNombrePerfil = String.Empty;

                    //bool VerEncriptados = false;

                    foreach (DataRow row in datPerfiles.Rows)
                    {
                        //decIdPerfil = Convert.ToDecimal(row[AdmPerfilesUsuariosData.PER_ID_FIELD]);

                        foreach (ListItem c in lbPerfiles.Items)
                        {
                            if(c.Value == row[AdmPerfilesUsuariosData.PER_ID_FIELD].ToString())
                                c.Selected = true;
                        }
                            //lbPerfiles.SelectedItem.Selected
                        //lbPerfiles.SelectedValue = row[AdmPerfilesUsuariosData.PER_ID_FIELD].ToString();
                        //strNombrePerfil = row[AdmPerfilesUsuariosData.PER_NOMBRE_FIELD].ToString();
                    }
                    //if(decIdPerfil != 0)
                    //{
                    //    ddlPerfiles.SelectedValue = decIdPerfil.ToString();
                    //}
                }

                #endregion
            }
        }
        catch (Exception ex)
        {

            lblMensaje.Text = ex.Message;
        }
    }

    #endregion

    #region cargarDepartamentos

    private void cargarDepartamentos()
    {
        BasZonasGeograficas objBasZonasGeograficas = new BasZonasGeograficas(ConfigurationManager.AppSettings["Conn"]);
        BasZonasGeograficasData objBasZonasGeograficasData = objBasZonasGeograficas.ConsultarZonasGeograficasDepartamento();
        ddldepartamentosAnthem.DataSource = objBasZonasGeograficasData;
        ddldepartamentosAnthem.DataValueField = BasZonasGeograficasData.ZON_ID_FIELD;
        ddldepartamentosAnthem.DataTextField = BasZonasGeograficasData.ZON_NOMBRE_FIELD;
        ddldepartamentosAnthem.DataBind();
        ddldepartamentosAnthem.Items.Insert(0, new ListItem("", ""));
        ddldepartamentosAnthem.SelectedIndex = 0;
    }

    #endregion

    #region btnRegresar_Click

    protected void btnRegresar_Click(object sender, ImageClickEventArgs e)
    {
        crearContextItems();
        Server.Transfer("UsuariosListado.aspx", true);
    }

    #endregion

    #region crearContextItems

    private void crearContextItems()
    {
        try
        {
            Context.Items["IdentificadorUsuId"] = IdentificadorUsuId;
        }
        catch (Exception ex)
        {
            lblMensaje.Text = ex.ToString();
        }
    }

    #endregion

    #region WccAcciones1_Add_OnClick

    protected void WccAcciones1_Add_OnClick(object sender, ImageClickEventArgs e)
    {
        Adcionar();
    }

    #endregion

    #region Adcionar

    private void Adcionar()
    {
        AdmUsuariosData objDS = new AdmUsuariosData();
        int intPerfel = 0;
        int intUsuario = 0;
        try
        {
            DataRow objRow = objDS.NewRow();
            objRow[AdmUsuariosData.USU_TIPO_FIELD] = "R";
            objRow[AdmUsuariosData.USU_NOMBRE_FIELD] = txtNombre.Text.Trim();
            objRow[AdmUsuariosData.USU_USUARIO_FIELD] = txtUsuario.Text.Trim();
            objRow[AdmUsuariosData.USU_CARGO_FIELD] = txtCargo.Text;
            objRow[AdmUsuariosData.USU_DIRECCION_FIELD] = txtDireccion.Text;
            objRow[AdmUsuariosData.USU_TELEFONO_FIELD] = txtTelefono.Text;
            objRow[AdmUsuariosData.USU_CORREO_ELECTRONICO_FIELD] = txtCorreoE.Text;
            objRow[AdmUsuariosData.USU_DIAS_EXPIRACION_FIELD] = int.Parse(txtDiasExpiracion.Text);
            objRow[AdmUsuariosData.USU_CLAVE_FIELD] = txtClave.Text;
            objRow[AdmUsuariosData.USU_CAMBIO_CLAVE_FIELD] = chkCambioClave.Checked ? ApplicationConfiguration.SI : ApplicationConfiguration.NO;

            objRow[AdmUsuariosData.USU_ESTADO_FIELD] = dlpEstadoUsuario.SelectedValue;

            objRow[AdmUsuariosData.USU_GENERO_FIELD] = rblGenero.SelectedValue;
            objRow[AdmUsuariosData.USU_FECHA_NACIMIENTO_FIELD] = clFechaNacimiento.SelectedDate;
            objRow[AdmUsuariosData.ZON_ID_FIELD] = ddlMunicipiosAnthem.SelectedValue;
            objDS.Add(objRow);
            lblMensaje.Visible = true;


            ArrayList obj = new ArrayList();
            foreach (ListItem objItem in lbPerfiles.Items)
                    {
                        if (objItem.Selected)
                            obj.Add(objItem.Value);
                    }

            BusinessRules.Usuarios objBR = new BusinessRules.Usuarios(ConfigurationManager.AppSettings["Conn"]);

            switch (objBR.AdicionarUsuariosConTransacciones(objDS, ref intUsuario, obj))
            {
                case 0:
                    lblMensaje.CssClass = "aviso";
                    lblMensaje.Visible = true;
                    //lblMensaje.Text = "El correo electronico ya existe";//
                    Utilidad.mostrarMensaje(Utilidad.TiposMensajes.Aviso, Utilidad.TraerMensaje("gmsgExisteCorreoElectronico", txtCorreoE.Text), lblMensaje);
                    break;
                case 1:
                    //lblMensaje.CssClass = "mensaje";
                    lblMensaje.Visible = true;

                    //lblMensaje.Text = "Registro almacenado exitosamente";//
                    //Utilidad.TraerMensaje("gmsgExitoGuardar");
                    Utilidad.mostrarMensaje(Utilidad.TiposMensajes.Mensaje, Utilidad.TraerMensaje("gmsgExitoGuardar"), lblMensaje);
                    //LimpiarCampos();
                    txtUsuario.Enabled = false;
                    WccAcciones1.Accion = Utilidad.Acciones.Actualizar;
                    WccAcciones1.AddVisible = false;
                    WccAcciones1.UpdateVisible = true;
                    WccAcciones1.DeleteVisible = true;
                    IdentificadorUsuId = intUsuario.ToString();
                    break;
                case -1:
                    lblMensaje.CssClass = "aviso";
                    lblMensaje.Visible = true;
                    //lblMensaje.Text = "El usuario ya existe"; //
                    Utilidad.mostrarMensaje(Utilidad.TiposMensajes.Aviso, Utilidad.TraerMensaje("gmsgExisteLogin", txtUsuario.Text), lblMensaje);
                    break;
            }
        }
        catch (Exception objEx)
        {
            //ExceptionManager.Publish(objEx);
            //lblMensaje.CssClass = "error";
            //lblMensaje.Visible = true;
            lblMensaje.Text = objEx.Message;//Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
    }

    #endregion

    #region Actualizar

    private void Actualizar()
    {
        
        AdmUsuariosData objDS = new AdmUsuariosData();
        try
        {
            DataRow objRow = objDS.NewRow();
            objRow[AdmUsuariosData.USU_ID_FIELD] = IdentificadorUsuId;
            objRow[AdmUsuariosData.USU_TIPO_FIELD] = "R";
            objRow[AdmUsuariosData.USU_NOMBRE_FIELD] = txtNombre.Text.Trim();
            objRow[AdmUsuariosData.USU_USUARIO_FIELD] = txtUsuario.Text.Trim();
            objRow[AdmUsuariosData.USU_CARGO_FIELD] = txtCargo.Text;
            objRow[AdmUsuariosData.USU_DIRECCION_FIELD] = txtDireccion.Text;
            objRow[AdmUsuariosData.USU_TELEFONO_FIELD] = txtTelefono.Text;
            objRow[AdmUsuariosData.USU_CORREO_ELECTRONICO_FIELD] = txtCorreoE.Text;
            objRow[AdmUsuariosData.USU_DIAS_EXPIRACION_FIELD] = int.Parse(txtDiasExpiracion.Text);
            objRow[AdmUsuariosData.USU_CLAVE_FIELD] = txtClave.Text;
            objRow[AdmUsuariosData.USU_ESTADO_FIELD] = dlpEstadoUsuario.SelectedValue;
            objRow[AdmUsuariosData.USU_GENERO_FIELD] = rblGenero.SelectedValue;
            objRow[AdmUsuariosData.USU_FECHA_NACIMIENTO_FIELD] = clFechaNacimiento.SelectedDate;
            objRow[AdmUsuariosData.ZON_ID_FIELD] = ddlMunicipiosAnthem.SelectedValue;
            objRow[AdmUsuariosData.USU_CAMBIO_CLAVE_FIELD] = chkCambioClave.Checked ? ApplicationConfiguration.SI : ApplicationConfiguration.NO;
            objDS.Add(objRow);
            lblMensaje.Visible = true;
            
             
            ArrayList obj = new ArrayList();
            foreach (ListItem objItem in lbPerfiles.Items)
            {
                if (objItem.Selected)
                    obj.Add(objItem.Value);
            }

            BusinessRules.Usuarios objBR = new BusinessRules.Usuarios(ConfigurationManager.AppSettings["Conn"]);
            switch (objBR.ActualizarUsuariosConTransacciones(objDS, obj))
            {
                case 0:
                    //lblMensaje.CssClass = "aviso";
                    lblMensaje.Visible = true;
                    lblMensaje.Text = "El correo electronico ya existe";//Utilidad.TraerMensaje("gmsgExisteCorreoElectronico", txtCorreoE.ToolTip);
                    break;
                case 1:
                    //lblMensaje.CssClass = "mensaje";
                    lblMensaje.Visible = true;
                    Utilidad.mostrarMensaje(Utilidad.TiposMensajes.Mensaje, Utilidad.TraerMensaje("gmsgExitoGuardar"), lblMensaje);
                    //lblMensaje.Text = "Registro actualizado exitosamente";//Utilidad.TraerMensaje("gmsgExitoGuardar");
                    //this.LimpiarCampos();
                    WccAcciones1.Accion = Utilidad.Acciones.Actualizar;
                    WccAcciones1.AddVisible = false;
                    WccAcciones1.UpdateVisible = true;
                    WccAcciones1.DeleteVisible = true;
                    break;
                case -1:
                    //lblMensaje.CssClass = "aviso";
                    lblMensaje.Visible = true;
                    lblMensaje.Text = "El usuario ya existe"; //Utilidad.TraerMensaje("gmsgExisteLogin", txtUsuario.Text);
                    break;
            }
        }
        catch (Exception objEx)
        {
            //ExceptionManager.Publish(objEx);
            //lblMensaje.CssClass = "error";
            //lblMensaje.Visible = true;
            lblMensaje.Text = objEx.Message;//Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
    }

    #endregion

    #region LimpiarCampos

    protected new void LimpiarCampos()
    {
        txtNombre.Text = "";
        ddldepartamentosAnthem.SelectedIndex = 0;
        ddlMunicipiosAnthem.Items.Clear();
        txtCargo.Text = "";
        txtDireccion.Text = "";
        txtTelefono.Text = "";
        dlpEstadoUsuario.SelectedIndex = 0;
        txtUsuario.Text = "";
        txtDiasExpiracion.Text = "";
        txtCorreoE.Text = "";

        txtNombre.AutoUpdateAfterCallBack = true;
        ddlMunicipiosAnthem.AutoUpdateAfterCallBack = true;
        ddldepartamentosAnthem.AutoUpdateAfterCallBack = true;
        txtCargo.AutoUpdateAfterCallBack = true;
        txtDireccion.AutoUpdateAfterCallBack = true;
        txtTelefono.AutoUpdateAfterCallBack = true;
        dlpEstadoUsuario.AutoUpdateAfterCallBack = true;
        txtUsuario.AutoUpdateAfterCallBack = true;
        txtDiasExpiracion.AutoUpdateAfterCallBack = true;
        txtCorreoE.AutoUpdateAfterCallBack = true;

        txtClave.Attributes.Add("Value", "");
        txtConfirmarClave.Attributes.Add("Value", "");
        txtClave.AutoUpdateAfterCallBack = true;
        txtConfirmarClave.AutoUpdateAfterCallBack = true;
    }

    #endregion

    #region WccAcciones1_Delete_OnClick

    protected void WccAcciones1_Delete_OnClick(object sender, ImageClickEventArgs e)
    {
        try
        {
            string[] strIDs = new string[1];
            strIDs[0] = IdentificadorUsuId;
            BusinessRules.Usuarios objUsuarios = new BusinessRules.Usuarios(ConfigurationManager.AppSettings["Conn"]);
            if (objUsuarios.EliminarUsuarios(strIDs) != 0)
            {
                LimpiarCampos();
                WccAcciones1.Accion = Utilidad.Acciones.Adicionar;
                WccAcciones1.AddVisible = true;
                WccAcciones1.UpdateVisible = false;
                WccAcciones1.DeleteVisible = false;
                lblMensaje.Visible = true;
                Utilidad.mostrarMensaje(Utilidad.TiposMensajes.Mensaje, Utilidad.TraerMensaje("gmsgEliminarRegistrosExitoso"), lblMensaje);
            }
        }

        catch (Exception ex)
        {
            lblMensaje.CssClass = "error";
            lblMensaje.Visible = true;
            lblMensaje.Text = Utilidad.TraerMensaje("gmsgErrorGeneral");
        }
      
    }

    #endregion



    #region WccAcciones1_Update_OnClick

    protected void WccAcciones1_Update_OnClick(object sender, ImageClickEventArgs e)
    {
        Actualizar();
    }

    #endregion

    #region ddldepartamentosAnthem_SelectedIndexChanged

    protected void ddldepartamentosAnthem_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddldepartamentosAnthem.SelectedValue != "")
        {
            cargarMunicipios(ddldepartamentosAnthem.SelectedValue);
        }
    }

    #endregion

    #region cargarMunicipios

    public void cargarMunicipios(string strZonIdPadre)
    {
        BasZonasGeograficas objBasZonasGeograficas = new BasZonasGeograficas(ConfigurationManager.AppSettings["Conn"]);
        BasZonasGeograficasData objBasZonasGeograficasData = objBasZonasGeograficas.ConsultarZonasGeograficasPadreZonId(strZonIdPadre);
        ddlMunicipiosAnthem.DataSource = objBasZonasGeograficasData;
        ddlMunicipiosAnthem.DataValueField = BasZonasGeograficasData.ZON_ID_FIELD;
        ddlMunicipiosAnthem.DataTextField = BasZonasGeograficasData.ZON_NOMBRE_FIELD;
        ddlMunicipiosAnthem.DataBind();
        ddlMunicipiosAnthem.UpdateAfterCallBack = true;
        //LimpiarPlanPrograma();
    }

    #endregion

}
